package com.lwl.Algorithmic_data_structure.class25单调栈;

/**
 * @author lwl
 * @Description 给你一个全是 0 和 1 的矩阵二维数组，请你求出矩阵中最大的矩形面积
 * 该题需要转化为Code04LargestRectInHistogram类型，每次加入一个一维数组组成直方图，然后求出直方图中的最大矩形，再从其中选出最大的矩形
 * @date 2023/6/26 8:51
 */
public class Code05MaxMatrixRect {

    public static void main(String[] args) {
        System.out.println(getMaxMatrixRect(new char[][]{
                {'0', '1', '1', '1', '0'},
                {'0', '1', '1', '1', '0'},
                {'0', '0', '1', '0', '0'},
                {'0', '1', '1', '1', '0'},
                {'0', '1', '1', '1', '0'},
                {'0', '1', '1', '1', '0'}
        }));
    }

    public static int getMaxMatrixRect(char[][] matrix) {
        int[] histogram = new int[matrix[0].length];
        int res = 0;
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (matrix[i][j] == '0') {
                    histogram[j] = 0;
                } else {
                    histogram[j] = histogram[j] + 1;
                }
            }
            int curMaxRect = Code04LargestRectInHistogram.getLargestRectInHistogram(histogram);
            res = Math.max(res, curMaxRect);
        }
        return res;
    }

}
